package com.edu.mapper;

import com.edu.bean.Book;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface BookMapper {

    /*
    *       1 查询的结果是一条数据，我们可以直接用一个对象来接受
    *          a 方法的 返回值类型 为 Pojo（一般java对象）
    *          b xml映射 文件中 必须写 resultType 指定是哪种类型
    * */
    Book selectBookById(int bookId);

    /*
    *       2 查询结果是 一条数据时，可以用 一个 Map集合来接受
    *           a 方法的 返回值 应该是 Map<String,Object>
                b xml中 resultType 必须写 map
                c map一般用于 查询结果中的某一列 实体类中不存在对应的属性
    * */
    //   根据id 查询 一本书的 编号 书名 和总价
    Map<String,Object> selectBookById2(int bookId);

    /*
    *   查询结果是多条数据
    *       List<POJO>
            a. 方法的返回值 List<POJO>
            b. xml中的 resultType 依旧使用POJO 不能写list
    *
    * */
    // 查询价格 在 指定范围 中的书
    List<Book> selectBooks(@Param("min") int minPrice, @Param("max") int maxPrice);

    /*
    *   查询结果是多条数据
    *           Map<String,Object> 可以表示一条数据
    *           List<Map<String,Object>>
    *
    * */

    List<Map<String,Object>> getAllBookAndSum();


    /*
    *   查询结果 如果是 一个数据 使用 对应的数据类型来接受就
    *           方法的返回值 用对应的数据类型（int string double）
    *           xml里 写 对应的别名
    *
    * */
    int selectBookTypeNum();

    //查询 所有书的总价
    double selectAllBookPrice();

}
